          SUBROUTINE (OID,GEN2,QSIGN,VIEW.ONLY,LOG.MV,RESTART)
** Version# 98.0001[2] - 08/01/2012 - 09:29pm - TSMITH - eclipse
*** V98.0001 Change - Custom Coding . - 08/01/2012 - TSMITH - eclipse
*-------------------------------------------------------------------------*
** Subroutine: OE.LOT.SUBTOLS
** This routine allows viewing of a particular gen by different product
** groupings (ie. price/buy line, sell group, etc), for OPEN gens.
** Also allows procurement, Copy to Bid PO by product groupings.
*-------------------------------------------------------------------------*
** Variables:
**        OID      Order ID                                     (In)
**        GEN      Order Generation                             (In)
**        QSIGN    Multiplier based on order mode               (In)
**        VIEW.ONLY                                             (In)
**        LOG.MV                                                (In)
**        RESTART  Flag to re-read in order record              (In/Out)
*-------------------------------------------------------------------------*
*** CVIEW - Used to identify current view:
***         0) COGS / GP%
***         1) Cost / GP%
***         2) Weight / Load Factor
***         Note - Because the Weight / Load Factor view also has Sales
***                and COGS on it, there may be references to CVIEW < 2.
*-------------------------------------------------------------------------*

          * Include work array sizes
          $INCLUDE CC DIM.EQUATES

          MODE     = OID[1,1]
          GEN      = GEN2
          ENTRY.OK = ''

          CHECK.KEY 'COGS.VIEW',ENTRY.OK
          IF ENTRY.OK THEN
             COGSV.ONLY = NO
          END ELSE
             COGSV.ONLY = YES
          END

          CHECK.KEY 'COST.VIEW',ENTRY.OK
          IF ENTRY.OK THEN
             COSTV.ONLY = NO
          END ELSE
             COSTV.ONLY = YES
          END

          IF LED(92)<1,GEN,1> THEN
             XRATE = OCONV(LED(92)<1,GEN,2>,'MR4')
          END ELSE
             XRATE = 1
          END
          WGT.FMT = 'MR':PRD.WGHT$

          *** looping through the gens to make sure that this
          *** order is not all invoiced GEN(s).  If it is all
          *** invoiced gens, then the shipdates hot key will
          *** be disabled because if the everything is invoiced and
          *** they try and use it, the only option is going to be
          *** "show all," but there is nothing to show.  Hence,
          *** they will get no data on the screen.
          MAX.GEN = DCOUNT(LED(12),VM)
          SHOW.ALL.GENS = ''
          FOR I = 1 TO MAX.GEN
             *** if we need to use the hot key (with show all),
             *** set the flag and exit from the loop.
             IF LED(6)<1,I> # 'I' AND LED(6)<1,I> # 'X' AND LED(6)<1,I> # 'Y' THEN
                SHOW.ALL.GENS = YES
                EXIT
             END
          NEXT I

          SCREEN
          GOSUB INIT
RESTART:
          GOSUB CLR.VARS
          GOSUB CLR.SCREEN
          *** giving closed gens access now.
          GOSUB SET.GROUPS
          IF NOT(PRC.KEY) THEN
             VIEW.ONLY = YES
          END
          GOSUB DISPLAY
          GOSUB LOAD.HOTKEYS

          LINE = 1; LASTKEY = 0; MOVE = 0; COLS = 6; PGL = 12; COL = 1
          IF VIEW.ONLY THEN
             PRINT @(2,0):BLINK$:"View Only":NORM$
IN.VIEW:     INPV A,0,LINE,0
             IF QUIT THEN GOTO FINISH
             DNOK  = (SUBGS<(LINE+1)> # '')
             NEWOK = NO
             PARSEMOVE COL,LINE,COLS,LINES,PGL,DNOK,NEWOK,BORDERMOVE
             GOTO IN.VIEW
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.DIST:  INP DMETHOD,66,2,12,V_"D:,Weighted Avg,Flat GP%"
          IF F12 THEN GOTO FINISH

          IF DMETHOD#OLD.METHOD THEN
             GOSUB CHANGE.METHOD
          END
          LINE = 1; LASTKEY = 0; MOVE = 0; COLS = 6; PGL = 12; COL = 1
*-------------------------------------------------------------------------*
MOVENEXT: IF QUIT THEN GOTO FINISH
          DNOK  = (SUBGS<(LINE+1)> # '')
          NEWOK = NO
          PARSEMOVE COL,LINE,COLS,LINES,PGL,DNOK,NEWOK,BORDERMOVE
          IF BORDERMOVE = 2 THEN
             IF CVIEW # 1 THEN
                GOTO IN.DIST
             END ELSE
                MESS 5,2,'Cannot Change Dist Method from Weight / Load Factor View'
IN$$8:          INP A,,,0
             END
          END
          DLN = LINE
          GOSUB SET.INFO
          BEGIN CASE
          CASE CVIEW=0 AND NOT(COGSV.ONLY)
             ON COL GOTO IN.SUB,IN.SLS,IN.COGS,IN.GP,IN.BAS,IN.FORM
          CASE CVIEW=1 AND NOT(COGSV.ONLY)
             IF COL > 1 THEN COL = 1
             ON COL GOTO IN.SUB
          CASE CVIEW=2 AND NOT(COSTV.ONLY)
             ON COL GOTO IN.SUB,IN.SLS,IN.COST,IN.GP,IN.BAS,IN.FORM
          CASE OTHERWISE
             IF COL > 4 THEN MOVE = 4; COL = 1; GOTO MOVENEXT
             ON COL GOTO IN.SUB,IN.SLS,IN.BAS,IN.FORM
          END CASE
*-------------------------------------------------------------------------*
IN.SUB:   *** Input subtotal group
          FROM.CC = NO
IN$$3:    INPV SUB,0,LINE,20
          IF CHANGED THEN
             SV.LINE = LINE
             LOCATE SUB IN SUBGS SETTING LINE ELSE
                LINE = SV.LINE
                DLN  = LINE
                GOSUB DISP.LN
                GOSUB CALC.TOLS
             END
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.SLS:   *** Input price
          FROM.CC = NO
          OLD.SLS = TSLS
          OLD.SAMTS = SAMTS<LINE>
IN$$4:    INPV NEW.TSLS,21,LINE,15,'N3'
          IF CHANGED THEN
             LDIDS = LDREFS<LINE>
             OE.CHECK.PRC.AUTH OID,GEN,LDIDS,CHG.PRC.OK
             IF NOT(CHG.PRC.OK) THEN
                NEW.TSLS = OLD.SLS
                GOSUB DISPLAY
                GOTO IN.SLS
             END
             TSLS = ICONV(NEW.TSLS*XRATE,'MR0')

             GOSUB PRORATE
             IF MIN.SELL.ERR THEN
                NEW.TSLS = OLD.SLS
                SAMTS<LINE> = OLD.SAMTS
             END
             DLN = LINE
             GOSUB DISP.LN
             GOSUB CALC.TOLS
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.GP:    *** Input GP
          FROM.CC = NO
          OLD.GPP = GPP
          OLD.SAMTS = SAMTS<LINE>
IN$$5:    INPV GPP,52,LINE,8,'N1'
          IF GPP > 1000 THEN
             PRINT BELL
             GPP = OLD.GPP
             GOSUB DISPLAY
             GOTO IN.GP
          END
          IF GPP = 1000 THEN
             IF CVIEW<2 THEN
                IF TCOGS THEN
                   PRINT BELL
                   GPP = OLD.GPP
                   GOSUB DISPLAY
                   GOTO IN.GP
                END
             END ELSE
                IF TCOST THEN
                   PRINT BELL
                   GPP = OLD.GPP
                   GOSUB DISPLAY
                   GOTO IN.GP
                END
             END
          END
          IF CHANGED THEN
             LDIDS = LDREFS<LINE>
             OE.CHECK.PRC.AUTH OID,GEN,LDIDS,CHG.PRC.OK
             IF NOT(CHG.PRC.OK) THEN
                GPP = OLD.GPP
                GOSUB DISPLAY
                GOTO IN.GP
             END
             GPP  = ICONV(OCONV(GPP,'MR1'),'MR1')
             DIVS = 1000 - GPP
             IF DIVS THEN
                IF CVIEW<2 THEN
                   TSLS = ICONV((TCOGS/(DIVS)),"MR3")
                END ELSE
                  TSLS = ICONV((TCOST/(DIVS)),"MR3")
                END
             END ELSE
                TSLS = 0
             END
             GOSUB PRORATE
             IF MIN.SELL.ERR THEN
                SAMTS<LINE> = OLD.SAMTS
             END
             DLN = LINE
             GOSUB DISP.LN
             GOSUB CALC.TOLS
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.BAS:   *** Input basis
          FROM.CC   = NO
          OLD.BASIS = BASIS
IN$$6:    INPV BASIS,61,LINE,9
          IF CHANGED OR HELP THEN
             LDIDS = LDREFS<LINE>
             OE.CHECK.PRC.AUTH OID,GEN,LDIDS,CHG.PRC.OK
             IF NOT(CHG.PRC.OK) THEN
                BASIS = OLD.BASIS
                GOSUB DISPLAY
                GOTO IN.BAS
             END
             DLN = LINE
             IF BASIS # '' OR HELP THEN
                OE.SELECT.GBASIS OID,BASIS,GBASN
                IF GBASN = '' THEN
                   GOTO IN.BAS
                END
                IF FORMS<LINE> # '' THEN
                   GOSUB BAS.CALC
                END
             END ELSE
                FORMS<LINE> = ''
             END
             BASISS<LINE> = BASIS
             DLN = LINE
             GOSUB DISP.LN
             GOSUB CALC.TOLS
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.FORM:  *** Input formula
          OLD.FORM = FORM
          FROM.CC = NO
IN$$7:    INPV FORM,71,LINE,7
          IF CHANGED THEN
             DLN = LINE
             IF BASISS<LINE> = '' THEN
                FORM = ''
                PRINT BELL:
                GOSUB DISP.LN
                GOTO IN.FORM
             END
             LDIDS = LDREFS<LINE>
             OE.CHECK.PRC.AUTH OID,GEN,LDIDS,CHG.PRC.OK
             IF NOT(CHG.PRC.OK) THEN
                FORM = OLD.FORM
                GOSUB DISPLAY
                GOTO IN.FORM
             END
             PARSE.FORMULA FORM,MULT,CONST,EFLAG
             IF EFLAG THEN PRINT BELL:; GOTO IN.FORM
             FORMS<LINE> = FORM
             GOSUB BAS.CALC
             DLN = LINE
             GOSUB DISP.LN
             GOSUB CALC.TOLS
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
BUILD.LDIDS:
          LDS = ''
          LDIDS = LDREFS<LINE>
          LDS = ''
          LDCNT = DCOUNT(LDIDS<1>,VM)
          FOR LDI = 1 TO LDCNT
             LDS := LDIDS<1,LDI>
             IF LDI # LDCNT THEN LDS := '|'
          NEXT LDI
          RETURN
*-------------------------------------------------------------------------*
IN.COGS:
          *** Input cogs
          SV.COGS = CGAMTS<LINE>
          FROM.CC = YES
          IF ALL.GENS THEN GEN = GNREFS<LINE,1>
          GOSUB BUILD.LDIDS
          COST.INFO = MODE:'~':LED(2)<1,GEN,2>:'~':LED(6)<1,GEN>:'~':1:'~':SV.COGS:'~':GEN:'~':0:'~':3:'~':LDS
INCOGS:   INPV NEW.TCOGS,37,LINE,14,'N3',V_'S:VERF.COST.GLVL,':COST.INFO
          IF TRIM(NEW.TCOGS) = '' THEN
             NEW.TCOGS = ICONV(OCONV(SV.COGS,'MR9'),'MR3')
             GOSUB DISP.LN
          END

          IF CHANGED THEN
             OE.GP.CHECK OID,GEN,,TSLS,PRC.ERROR,NEW.TCOGS,NO,YES,TSLS,' in Lot Subtotals'
             IF PRC.ERROR THEN
                GOSUB DISP.LN
                GOTO IN.COGS
             END
             TCOGS = ICONV(NEW.TCOGS*XRATE,'MR0')
             GOSUB PROCOGS

             DLN = LINE
             GOSUB DISP.LN
             GOSUB CALC.TOLS
          END ELSE
             DLN = LINE
             GOSUB DISP.LN
          END

TSKIP:    GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.COST:  *** Input Cost
          SV.COST = CTAMTS<LINE>
          FROM.CC = YES
          IF ALL.GENS THEN GEN = GNREFS<LINE,1>
          GOSUB BUILD.LDIDS
          COST.INFO = MODE:'~':LED(2)<1,GEN,2>:'~':LED(6)<1,GEN>:'~':25:'~':SV.COST:'~':GEN:'~':0:'~':3:'~':LDS
INCOST:   INPV NEW.TCOST,37,LINE,14,'N3',V_'S:VERF.COST.GLVL,':COST.INFO
          IF TRIM(NEW.TCOST) = '' THEN
             NEW.TCOST = ICONV(OCONV(SV.COST,'MR9'),'MR3')
             GOSUB DISP.LN
          END

          IF CHANGED THEN
             OE.GP.CHECK OID,GEN,,TSLS,PRC.ERROR,NEW.TCOST,YES,YES,TSLS,' in Lot Subtotals'
             IF PRC.ERROR THEN
                GOSUB DISP.LN
                GOTO IN.COST
             END
             TCOST = ICONV(NEW.TCOST*XRATE,'MR0')
             GOSUB PROCOST

             DLN = LINE
             GOSUB DISP.LN
             GOSUB CALC.TOLS
          END ELSE
             DLN = LINE
             GOSUB DISP.LN
          END

          GOTO MOVENEXT
*-------------------------------------------------------------------------*
PRORATE:  ***  Prorate
          UPD.MODE = "PRORATE"
          NEW.VALUE = TSLS
          GOSUB DO.UPDATE

          RETURN
*-------------------------------------------------------------------------*
PROCOGS:  *** Cogs
          UPD.MODE = "COGS"
          NEW.VALUE = TCOGS
          GOSUB DO.UPDATE
          RETURN
*-------------------------------------------------------------------------*
PROCOST:  *** Cost
          UPD.MODE = "COMM"
          NEW.VALUE = TCOST
          GOSUB DO.UPDATE
          RETURN
*-------------------------------------------------------------------------*
BAS.CALC: *** Basis calculation
          UPD.MODE = "BAS.CALC"
          NEW.VALUE = FORM:AM:GBASN
          GOSUB DO.UPDATE

          RETURN
*-------------------------------------------------------------------------*
DO.UPDATE:*** Do update
          OE.LOT.SUBTOLS.UPD OID,GEN,QSIGN,ALL.GENS,SOPT,SAMTS,CGAMTS,CTAMTS,BASISS,FORMS,LDREFS,GNREFS,NEW.VALUE,UPD.MODE,LINE,CVIEW,DMETHOD,LOG.MV,MIN.SELL.ERR

          RETURN
*-------------------------------------------------------------------------*
SUBS:     ON OPTION GOTO CHG.DT, CHG.SORT, VIEW.IT, COPYIT,CHANGE.STAT,PROCURE,PRC.COST,DEL.LINES,CHANGE.VIEW
*-------------------------------------------------------------------------*
VIEW.IT:  OE.LOT.VIEW.ITEMS OID,GEN,QSIGN,LDREFS<LINE>,ALL.GENS
          RETURN
*-------------------------------------------------------------------------*
CHG.DT:   *** Change Date
          IF NOT(SHOW.ALL.GENS) THEN  PRINT BELL:; RETURN
          GN = GEN
          * select only open gens
          OE.SELECT.SHIPDATE OID,GN,'All Ship Dates',,YES
          IF GN = '' THEN
             IF ALL.GENS THEN
                GN = 'All Ship Dates'
             END ELSE
                GN = GEN
             END
          END
          IF GN = 'All Ship Dates' THEN GN = 'ALL'
          IF GEN # GN THEN GEN = GN

          GOSUB RE.INIT

          RETURN TO RESTART
*-------------------------------------------------------------------------*
CHG.SORT: *** Change the Grouping (sortby) of subtotals
          SV.SFMT = SFMT
          LOCATE SFMT IN SFMTS<1> SETTING SPOS ELSE SPOS = 1
          MENU.TABLE SFMT,,,1,11,20,,,SFMTS,"Subtotal Sort",SPOS
          IF SFMT = '' THEN SFMT = SV.SFMT

          RETURN TO RESTART
*-------------------------------------------------------------------------*
COPYIT:   BT.CN = ''; ST.CN = ''
          IF VIEW.ONLY THEN RETURN
IN.CUS:   GOSUB GET.VN
          IF ST.CN = '' OR F12 THEN RETURN
          READV CTYPES FROM CUSFILE,ST.CN,7 ELSE CTYPES = ''
          IF CTYPES<1,5> THEN BT.CN = ST.CN ELSE
             READV BT.CN FROM CUSFILE,ST.CN,11 ELSE
                ERR.MESS 23,3,'Invalid Ship From.'
INP.WAIT:       INP A,,,0
                GOTO IN.CUS
             END
          END

          * If dimed array is going to be used for reset with MAT = MAT
          * then dim size must be the same or the remaining fields/array
          * will not be reset correctly, due to MAT = MAT only overlaying
          * defined dim size.
          * DIM sizes defined in CC DIM.EQUATES
          DIM LED2(DIM.LED.SIZE%), OLED2(DIM.LED.SIZE%)
          DIM SV.LD(DIM.LD.SIZE%), SV.OLD(DIM.LD.SIZE%)
          SV.VIEW    = OE.VIEW.DATA$
          MAT LED2   = MAT LED
          MAT SV.LD  = MAT LD
          MAT OLED2  = MAT OLED
          MAT SV.OLD = MAT OLD.LD

          MATBUILD SCUS FROM CUS
          MATBUILD SCSS FROM CUSS
          MATBUILD SPRD FROM PRD
          CLDIDS   = LDREFS<LINE>
          CGENS    = GNREFS<LINE>
          KEY.REQD = 'OE.COPY.BID'
          GN       = GEN
          CHECK.KEY KEY.REQD,ENTRY.OK
          IF NOT(ENTRY.OK) THEN
             PRMPT    = 'Copy a bid'
             OE.GET.AUTH OLD.OID,PRMPT,KEY.REQD,ACTION.OK
             IF NOT(ACTION.OK) THEN RETURN
          END

          CTRL.ID  = 'NEXT.PON'

          RECST = ''
          COST  = ''
          GOSUB NEW.PO

          IF CREATE.ERR.MESS='' THEN
             INIT.OID = NEW.OID
             OE.NEXT.SHIPDATE INIT.GEN
             OE 'P',1,INIT.OID,INIT.GEN,VIEW.ONLY

             COMMENT = 'Copied from : ':OID
             OE.ADD.COMMENT NEW.OID,'ALL',COMMENT
          END

          MAT LED = MAT LED2
          MAT LD  = MAT SV.LD
          MAT OLED   = MAT OLED2
          MAT OLD.LD = MAT SV.OLD

          MATPARSE CUS  FROM SCUS
          MATPARSE PRD  FROM SPRD
          MATPARSE CUSS FROM SCSS
          OE.VIEW.DATA$ = SV.VIEW

          RETURN
*-------------------------------------------------------------------------*
GET.VN:   INP.PROMPT ST.CN,"Enter Ship From : ",,25,"S:VERF.VEN.SF"
          RETURN
*-------------------------------------------------------------------------*
NEW.PO:   *** Routine to copy information to a new PO Bid
          IF ALL.GENS THEN GEN = GNREFS<1,1>
          PRC.BR  = LED(2)<1,GEN,1>
          RECV.BR = LED(2)<1,GEN,2>
          PNS = ''; QTYS = ''; CMNTS = ''
          PN.CTR = 0

          * If user selected Copy to Purchase Order Bids,
          * subroutine will be called
          COPT = '0'
          OE.COPY.BID.PUR COPT

          MAT LED = MAT OLED
          QSIGN = -1
          STAT  = 'B'

          LDID.CT = DCOUNT(CLDIDS<1>,VM)

          * Loop through each LDID and see if this product
          * should be added to order
          FOR LDN = 1 TO LDID.CT
             GEN = CGENS<1,LDN>
             LDID = CLDIDS<1,LDN>
             LD.GET LDID
             IF LD(4)+0=0 OR NOT(NUM(LD(1))) THEN CONTINUE
             GET.ALL.PRD PRC.BR,LD(1),QSIGN
             PN = LD(1); PN.QTYS = 0

             * Make sure the your loc and your # comments are removed.
             PN.CMTS = LOWER(LD(3))
             GOSUB CLN.CMTS

             PN.QTYS += QSIGN*(SUM(LD(5)<1,GN>) + SUM(LD(6)<1,GN>))

             IF PN.QTYS = 0 THEN CONTINUE
             BEGIN CASE
             CASE COPT = 2
                IF LD(11)<1,GEN> # '' THEN RECOST = YES ELSE RECOST = NO
             CASE COPT = 3
                RECOST = YES
             CASE OTHERWISE
                RECOST = NO
             END CASE

             GOSUB FIND.NEW.PPOS
             IF PPOS#0 THEN
                QTYS<1,PPOS> += PN.QTYS
                CMNTS<1,PPOS,-1> = PN.CMTS
             END ELSE
                PN.CTR += 1
                PNS<1,PN.CTR>  = PN
                QTYS<1,PN.CTR> = PN.QTYS
                CMNTS<1,PN.CTR>= PN.CMTS
                RECST<1,PN.CTR> = RECOST
                COST<1,PN.CTR>  = LD(10)<1,GEN>
             END
          NEXT LDID

          LDATA     = ''
          LDATA<95> = LED2(95)<1,GEN>

          OE.CREATE.LEDGER 'P',0,NEW.OID,NEW.GEN,PRC.BR,BT.CN,ST.CN,STAT,DATE(),DATE(),PNS,QTYS,CMNTS,,,,,RECV.BR,DATE(),,,CREATE.ERR,,,,LDATA,RECST,COST

          * Display the error we got if we got one.
          IF CREATE.ERR AND CREATE.ERR # 0 THEN
             BEGIN CASE
             CASE CREATE.ERR = 1
                CREATE.ERR.MESS = 'Entity ID not Found! Unable to Copy.'
             CASE CREATE.ERR = 2
                CREATE.ERR.MESS = 'No Items Found. Copy Aborted.'
             CASE OTHERWISE
                CREATE.ERR.MESS = 'Ledger Locked By another User. Operation Aborted.'
             END CASE
             A = ''
IN$$1:       INP.PROMPT A,CREATE.ERR.MESS,,0
          END ELSE
             CREATE.ERR.MESS = ''
          END

          RETURN
*-------------------------------------------------------------------------*
*** Find the new position in the part number... lists
*** This will effectively be the ldid on the po
FIND.NEW.PPOS:
          SPOS = 1
          LOOP
             LOCATE PN IN PNS<1>,SPOS SETTING PPOS ELSE EXIT
             SPOS = PPOS+1
             *If we are not preserving cost overrides, combine part numbers
             IF NOT(RECOST) AND NOT(RECST<1,PPOS>) THEN RETURN
             *The found part must have override on, not a good match
             IF NOT(RECOST) THEN CONTINUE
             *Finally, if overrides are the same it is a match
             IF RECST<1,PPOS> AND LD(10)<1,GEN>=COST<1,PPOS> THEN RETURN
          REPEAT
          PPOS = 0
          RETURN
*-------------------------------------------------------------------------*
CLN.CMTS: *** Routine to get ride of your # and your loc comments.
          CMT.CT = DCOUNT(PN.CMTS,SVM)
          FOR JT = CMT.CT TO 1 STEP -1
             CMT = TRIM(OCONV(PN.CMTS<1,1,JT>,'MCU'))
             IF CMT[1,6]='YOUR #' OR CMT[1,13]='YOUR LOCATION' THEN
                PN.CMTS = DELETE(PN.CMTS,1,1,JT)
             END
          NEXT JT
          RETURN
*-------------------------------------------------------------------------*
CHANGE.STAT: *** Create a New GEN with a New Status

          SV.GEN = GEN

          OE.NEW.GEN.INFO OID,GEN,NGEN
          IF NGEN='' THEN
             RETURN
          END ELSE
             GEN=NGEN
          END

          LDID.CT = DCOUNT(LDREFS<LINE>,VM)

          FOR LDN = 1 TO LDID.CT
             LDID = LDREFS<LINE,LDN>
             LD.GET LDID
             MAT OLD.LD = MAT LD

             GEN.CT   = DCOUNT(LED(12)<1>,VM)
             FOR TGEN = 1 TO GEN.CT
                IF GEN=TGEN THEN CONTINUE
                OQTY = SUM(LD(5)<1,TGEN>)
                NQTY = SUM(LD(6)<1,TGEN>)
                BQTY = 0
                LD(5)<1,GEN> += OQTY
                LD(5)<1,TGEN> = BQTY
                LD(6)<1,GEN> += NQTY
                LD(6)<1,TGEN> = BQTY
                IF LED(6)<1,GEN> = 'D' THEN
                   LOCATE LED(33)<1,GEN> IN LED(12)<1> SETTING DGEN ELSE
                      DGEN = GEN
                   END
                   LD(7)<1,GEN> = 'D~':LED(1)<1,DGEN>
                END ELSE
                   LD(7)<1,GEN> = 'S~'
                END
             NEXT TGEN

             GEN.MV = GEN
             UPDATE.LEDGER.DET OID,LDID,QSIGN,GEN.MV
          NEXT LDN

          UPDATE.LEDGER OID,GEN
          OE.DEL.NULL.GENS OID,GEN

          GOSUB RE.INIT

          RETURN TO RESTART
*-------------------------------------------------------------------------*
PROCURE:  *** Procure
          OE.LOT.PROCURE OID,GEN,SUBGS<LINE>,SAMTS<LINE>,CGAMTS<LINE>,CTAMTS<LINE>,WGHTS<LINE>,LFCTS<LINE>,LDREFS<LINE>,GNREFS<LINE>,QSIGN,LOG.MV
          RETURN
*-------------------------------------------------------------------------*
PRC.COST: *** Price Cost
          OE.ITEM.PRICING.OVRD OID,GEN,QSIGN,LOG.MV,PRC.KEY,LDREFS<LINE>
          RETURN TO RESTART
*-------------------------------------------------------------------------*
DEL.LINES:*** Delete a range of line items.
          OE.DEL.LINES OID,GEN,QSIGN,LOG.MV,LDREFS<LINE>
          RESTART = YES
          RETURN TO RESTART
*-------------------------------------------------------------------------*
CLR.SCREEN:*** Clear screen
          VCLR 1
          RETURN
*-------------------------------------------------------------------------*
INIT:     *** Initialize variables

          CHECK.KEY MODE:'OE.CLOSED.QTY.EDIT',,CLEVEL

          SV.VIEW.ONLY = VIEW.ONLY
          OE.GET.KEYS OID,GEN,NO,VIEW.ONLY,PRC.KEY
          SV.PRC.KEY = PRC.KEY

          SFMTS = "Subtotal Group,Sell Group,Buy Group,Price Line,Buy Line,Select Code,Commodity Code,UPC Vendor Code,Sales Budget Group,Release #,Cost Code"
          CONVERT ',' TO VM IN SFMTS

          VSCROLL.DEFINE 1,1,4,78,12
          VSCROLL.SET 1

          OE.GET.QSIGN QSIGN,OID,GEN

          IF COGSV.ONLY AND NOT(COSTV.ONLY) THEN
             CVIEW = 2
             PRINT @(42,3):'Cost'
          END ELSE
             CVIEW = 2
          END
          FROM.CC = NO

RE.INIT:  * Start here to re-initialize (ie. gen change)

          IF GEN = 'ALL' THEN
             ALL.GENS = YES
             SHP.DT   = 'All Ship Dates'
             DMETHOD  = ''
             SFMT     = ''
             ENABLE.STATUS = NO
          END ELSE
             ALL.GENS = NO
             SHP.DT   = LED(9)<1,GEN>
             LED(97)<1,GEN,1> = 'Flat GP%'
             DMETHOD  = LED(97)<1,GEN,1>
             SFMT     = LED(97)<1,GEN,2>

             * If the gen is invoiced and they dont have the key
             * SOE.CLOSED.QTY.EDIT then dont activate the 'Status'
             * hotkey
             IF LED(6)<1,GEN> = 'I' AND CLEVEL < 1 THEN
                ENABLE.STATUS = NO
             END ELSE
                ENABLE.STATUS = YES
             END

             VIEW.ONLY = SV.VIEW.ONLY
             PRC.KEY   = SV.PRC.KEY
          END

          IF DMETHOD = "" THEN
             DMETHOD = 'Weighted Avg'
          END
          OLD.METHOD = DMETHOD

          IF SFMT = "" THEN
             SFMT = 'Subtotal Group'
          END

          PRINT @(66,2):DMETHOD "L#12"

          RETURN
*-------------------------------------------------------------------------*
CLR.VARS: *** Re-intialize variables

          SUBGS  = ''
          SAMTS  = ''
          CGAMTS = ''
          CTAMTS = ''
          BASISS = ''
          FORMS  = ''
          WGHTS  = ''
          LFCTS  = ''
          LDREFS = ''
          GNREFS = ''

          RETURN
*-------------------------------------------------------------------------*
LOAD.HOTKEYS:*** Load hot keys.

          MENU.CLEAR
          MENU.LOAD 15,19, 9,6,'D'
          MENU.LOAD 27,19, 8,1,'G'
          IF NOT(VIEW.ONLY) THEN
             MENU.LOAD  2,19,10,6,'I'
             MENU.LOAD 38,19,14,1,'C'
             IF ENABLE.STATUS THEN
                MENU.LOAD 62,19, 6,1,'S'
             END ELSE
                MENU.LOAD ,,,,
             END
             MENU.LOAD 71,19, 7,1,'P'
             MENU.LOAD  2,21,15,9,'R'
             MENU.LOAD 20,21, 6,5,'T'
          END ELSE
             MENU.LOAD ,,,,
             MENU.LOAD ,,,,
             MENU.LOAD ,,,,
             MENU.LOAD ,,,,
             MENU.LOAD ,,,,
             MENU.LOAD ,,,,
          END

          MENU.LOAD 55,19, 4,1,'V'

          RETURN
*-------------------------------------------------------------------------*
CLR.TOLS: *** Clear out totals
          SLS.TOT = 0
          COG.TOT = 0
          COST.TOT  = 0
          GP.TOT = 0
          GP = 0
          WGHT.TOT = 0
          LFCT.TOT = 0

          RETURN
*-------------------------------------------------------------------------*
SET.GROUPS:*** Set groups price key auth level
          LOCATE SFMT IN SFMTS<1> SETTING SOPT ELSE SOPT = 1
          OE.LOT.SUBTOLS.GET.DATA OID,GEN,QSIGN,SOPT,SUBGS,SAMTS,CGAMTS,CTAMTS,BASISS,FORMS,WGHTS,LFCTS,LDREFS,GNREFS,,PRC.KEY.OVRD
          IF PRC.KEY THEN PRC.KEY = PRC.KEY.OVRD
          RETURN
*-------------------------------------------------------------------------*
DISPLAY:  LINES = DCOUNT(SUBGS,AM)
          PRINT @(14,1):OID
          PRINT @(14,2):OCONV(SHP.DT,'D4/')  "L#14"
          IF ALL.GENS THEN GEN = GNREFS<1,1>
          IF LED(92)<1,GEN,1> # '' THEN
             PRINT @(60,0):BLINK$:LED(92)<1,GEN,1>:' - ':XRATE"R4#8":NORM$
          END
          IF CVIEW = 1 THEN
             PRINT @(53,3)  :'WeightLoad Fact'
             FOR I = 1 TO 12
             PRINT @(53,I+3):'                         '
             NEXT I
             PRINT @(53,16) :''
             PRINT @(53,18) :''
          END ELSE
             PRINT @(53,3)  :'GP %BasisFormula'
             FOR I = 1 TO 12
             PRINT @(53,I+3):'                        '
             NEXT I
             PRINT @(53,16) :''
             PRINT @(53,18) :''
          END
          FOR DLN = 1 TO LINES
             GOSUB DISP.LN
          NEXT DLN

          GOSUB CALC.TOLS
          LINE = 1

          RETURN
*-------------------------------------------------------------------------*
DISP.LN:  GOSUB SET.INFO

          VPRINT  0,DLN,SUBT                                    "L#20"
          VPRINT 21,DLN,OCONV(ICONV(TSLS/XRATE,'MR0'),'MR3')    "R#15"

          BEGIN CASE
          CASE CVIEW=0 AND NOT(COGSV.ONLY)
             VPRINT 37,DLN,OCONV(ICONV(TCOGS/XRATE,'MR0'),'MR3') "R#14"
             VPRINT 52,DLN,OCONV(GPP,'MR1')                     "R#8":""
             VPRINT 61,DLN,BASIS                                "L#9":""
             VPRINT 71,DLN,FORM                                 "L#7"
          CASE CVIEW=1 AND NOT(COGSV.ONLY)
             VPRINT 37,DLN,OCONV(ICONV(TCOGS/XRATE,'MR0'),'MR3') "R#14"
             VPRINT 56,DLN,OCONV(TWGHT,WGT.FMT)                  "R4#12":""
             VPRINT 69,DLN,OCONV(TLFCT,'MR4')                   "R4#9"
          CASE CVIEW=2 AND NOT(COSTV.ONLY)
             VPRINT 37,DLN,OCONV(ICONV(TCOST/XRATE,'MR0'),'MR3') "R#14"
             VPRINT 52,DLN,OCONV(GPP,'MR1')                     "R#8":""
             VPRINT 61,DLN,BASIS                                "L#9":""
             VPRINT 71,DLN,FORM                                 "L#7"
          CASE CVIEW=1 AND COGSV.ONLY
             VPRINT 37,DLN,'**********  '                       "R#14"
             VPRINT 56,DLN,OCONV(TWGHT,WGT.FMT)                 "R4#12":""
             VPRINT 69,DLN,OCONV(TLFCT,'MR4')                   "R4#9"
          CASE OTHERWISE
             VPRINT 37,DLN,'**********  '                       "R#14"
             VPRINT 52,DLN,'*****  '                            "R#8":""
             VPRINT 61,DLN,BASIS                                "L#9":""
             VPRINT 71,DLN,FORM                                 "L#7"
          END CASE

          RETURN
*-------------------------------------------------------------------------*
SET.INFO: SUBT  = SUBGS<DLN>
          IF SUBT = "!!" THEN SUBT = ""
          TSLS  = ICONV(OCONV(SAMTS<DLN>,'MR9'),'MR3')
          TCOGS = ICONV(OCONV(CGAMTS<DLN>,'MR9'),'MR3')
          TCOST = ICONV(OCONV(CTAMTS<DLN>,'MR9'),'MR3')
          BASIS = BASISS<DLN>
          FORM  = FORMS<DLN>
          TWGHT = WGHTS<DLN>
          TLFCT = LFCTS<DLN>
          IF TSLS=0 THEN GPP = 0 ELSE
             IF CVIEW<2 THEN
                GPP = ICONV(((TSLS - TCOGS)/TSLS*100),'MR1')
             END ELSE
                GPP = ICONV(((TSLS - TCOST)/TSLS*100),'MR1')
             END
          END
          RETURN
*-------------------------------------------------------------------------*
CALC.TOLS:*** Calculate Totals
          GOSUB CLR.TOLS
          LINES = DCOUNT(SUBGS,AM)

          FOR DLN = 1 TO LINES
             GOSUB SET.INFO
             SLS.TOT  += TSLS
             COG.TOT  += TCOGS
             COST.TOT += TCOST
             WGHT.TOT += TWGHT
             LFCT.TOT += TLFCT
          NEXT DLN

          SLS.TOT = OCONV(ICONV(SLS.TOT/XRATE,'MR0'),'MR3')     "R#15"
          COG.TOT = OCONV(ICONV(COG.TOT/XRATE,'MR0'),'MR3')     "R#14"
          COST.TOT = OCONV(ICONV(COST.TOT/XRATE,'MR0'),'MR3')   "R#14"
          IF SLS.TOT+0 = 0 THEN GP.TOT = 0 ELSE
             BEGIN CASE
             CASE CVIEW = 1
                GP.TOT = ((SLS.TOT-COG.TOT)/SLS.TOT)*100
             CASE CVIEW = 2
                GP.TOT = ((SLS.TOT-COST.TOT)/SLS.TOT)*100
             CASE OTHERWISE
                GP.TOT = ((SLS.TOT-COG.TOT)/SLS.TOT)*100
             END CASE
          END
          GP.TOT = GP.TOT                                       "R1#8"
          WGHT.TOT = OCONV(WGHT.TOT,WGT.FMT)                    "R4#16"
          LFCT.TOT = OCONV(LFCT.TOT,'MR4')                      "R4#9"

          NO.TOTALS = '                '

          C.VO  = "   ********** "                              "L#14"
          GP.VO = "  ***** "                                    "L#8"

          * User may not be able to see all the totals based on the
          * auth keys the user does (or does not) have.
          BEGIN CASE

          * COGS view and user has auth
          CASE CVIEW = 0 AND NOT(COGSV.ONLY)
             PRINT @(22,17):SLS.TOT:'':COG.TOT:'':GP.TOT:NO.TOTALS

          * Weight (w/COGS) view and user has auth
          CASE CVIEW = 1 AND NOT(COGSV.ONLY)
             PRINT @(22,17):SLS.TOT:'':COG.TOT:'':WGHT.TOT:'':LFCT.TOT

          * Cost view and user has auth
          CASE CVIEW = 2 AND NOT(COSTV.ONLY)
             PRINT @(22,17):SLS.TOT:'':COST.TOT:'':GP.TOT:NO.TOTALS

          * Weight (w/COGS) view and user does NOT have auth
          CASE CVIEW = 1 AND COGSV.ONLY
             PRINT @(22,17):SLS.TOT:'':C.VO:'':WGHT.TOT:'':LFCT.TOT

          * Cost view and user does NOT have auth
          CASE OTHERWISE
             PRINT @(22,17):SLS.TOT:'':C.VO:'':GP.VO:NO.TOTALS
          END CASE

          RETURN
*-------------------------------------------------------------------------*
CHANGE.VIEW:*** Change View from COGS$ to Cost$ or vice versa

          SV.CVIEW = CVIEW
          VIEW.OPTS = 'Sales COGS / GP%':VM:'Sales Cost / GP%':VM:'Weight / Load Factor'
          BEGIN CASE
          CASE CVIEW=0
             LPOS = 1
          CASE CVIEW=1
             LPOS = 3
          CASE CVIEW=2
             LPOS = 2
          END CASE
          MENU.TABLE WORD,,,1,3,20,,,VIEW.OPTS,'View',LPOS
          BEGIN CASE
          CASE WORD[7,4] = 'COGS'
             CVIEW = 0
             LINE = 1
             COL = 1
          CASE WORD[1,6] = 'Weight'
             CVIEW = 1
             LINE = 1
             COL = 1
          CASE OTHERWISE
             CVIEW = 2
             LINE = 1
             COL = 1
          END CASE
          IF SV.CVIEW = CVIEW THEN RETURN

          BEGIN CASE
          CASE CVIEW < 2
             PRINT @(42,3):'COGS'
          CASE OTHERWISE
             PRINT @(42,3):'Cost'
          END CASE

          GOSUB DISPLAY
          GOSUB CALC.TOLS

          BEGIN CASE
          CASE CVIEW < 2 AND FROM.CC
             FROM.CC = NO
             RETURN TO IN.COGS
          CASE CVIEW = 2 AND FROM.CC
             FROM.CC = NO
             RETURN TO IN.COST
          END CASE

          IF (VIEW.ONLY) THEN
             RETURN TO IN.VIEW
          END ELSE
             RETURN TO MOVENEXT
          END
*-------------------------------------------------------------------------*
CHANGE.METHOD:*** Change Method
          SLINE  = LINE
          PROMPT = 'Recalculate all groups ? (Y/N) : '
          CHAN   = 'N'
IN$$2:    INP.PROMPT CHAN, PROMPT, 'YN', 1
          IF CHAN THEN
             LOOPCOUNT = DCOUNT(LDREFS,AM)
             FOR LINE = 1 TO LOOPCOUNT
                DLN = LINE
                GOSUB SET.INFO
                GOSUB PRORATE
             NEXT LINE
          END
          OLD.METHOD = DMETHOD
          LINE = SLINE
          RETURN
*-------------------------------------------------------------------------*
FINISH:   WINDOW.CLOSE
          VIEW.ONLY = SV.VIEW.ONLY
          IF ALL.GENS THEN GEN = GNREFS<1,1>
          LED(97)<1,GEN> = DMETHOD:SVM:SFMT
          RETURN
*-------------------------------------------------------------------------*
!TSMITH~03/15/12~08:32

!TSMITH~08/01/12~21:29
